package cn.itcast.web.shiro;

import cn.itcast.utils.Encrypt;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/**
 * 密码比较器
 *  1、继承父类 SimpleCredentialsMatcher
 *  2、重写密码比较方法
 */
public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {

    /**
     * 密码比较方法
     *  参数：
     *      token：用户登录输入的用户名和密码
     *      info：认证数据
     *          安全数据：用户对象User
     *          密码：数据库密码
     *          realm域名称：类名
     *  返回值：
     *      boolean：密码是否一致
     *      true：密码一致
     *      false：密码不一致，自动的抛出异常
     */
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        //1、获取用户登录输入的邮箱密码
        UsernamePasswordToken upToken = (UsernamePasswordToken) token;
        String email = upToken.getUsername();
        String password = new String(upToken.getPassword());
        //2、获取数据库密码
        String dbPassword = (String)info.getCredentials();
        //3、对用户输入的密码加密
        password = Encrypt.md5(password,email);
        //4、比较两个密码
        return dbPassword.equals(password);
    }
}
